﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;

namespace CapaPresentacion.Controles
{
    class NuevoParametroGeneralViewModel
    {
        public event ReiniciarCU ReiniciarCU;

        #region Variables

        private VigenciaParametro vigenciaParametro;


        private RelayCommand saveCommand;
        private RelayCommand newCommand;
        private RelayCommand openCommand;

        #endregion

        #region Propiedades

        public ICommand SaveCommand
        {
            get
            {
                return saveCommand;
            }
        }

        public ICommand NewCommand
        {
            get
            {
                return newCommand;
            }
        }

        public VigenciaParametro VigenciaParametro
        {
            get { return vigenciaParametro; }
            set { vigenciaParametro = value; }
        }

      
        public List<ViewEntity> ListaParametros { get; set; }

        #endregion
        public NuevoParametroGeneralViewModel()
        {

        }


        public void Inicializar() 
        {

            ListaParametros = new VigenciaParametroLogica().ObtenerParametros();

            if (ListaParametros.Count > 0)
            {

                this.vigenciaParametro = new VigenciaParametro();

                this.saveCommand = new RelayCommand(GuardarVigenciaParametro);
                this.newCommand = new RelayCommand(NuevaVigenciaParametro);

            }
            else
            {

                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No existen parámetros cargados en el sistema. Contáctese con el Administrador del mismo");
                nueva.ShowDialog();
                this.ReiniciarCU(CasosDeUso.IrMenuPrincipal);

            }
        }


        private void NuevaVigenciaParametro(Object parameter)
        {
            if (MessageBox.Show("¿Está seguro que desea cargar los datos de un parámetro general del sistema?", "Confirme su Decisión", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
            {
                this.ReiniciarCU(CasosDeUso.NuevoParametroGeneral);
            }
        }



         private void GuardarVigenciaParametro(Object parameter)
         {

            if (MessageBox.Show("¿Está seguro que desea guardar los datos?", "Confirme su Decisión", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
            {
                if (Validaciones())
                {
                    try
                    {
                        if (new VigenciaParametroLogica().ExistenVigencias(this.vigenciaParametro.IdParametro))
                        {

                            VigenciaParametro antigua = new VigenciaParametroLogica().ObtenerVigente(this.vigenciaParametro.IdParametro);
                            antigua.FechaHasta = DateTime.Now;
                            new VigenciaParametroLogica().Modificar(antigua);

                            this.vigenciaParametro.IdVigencia = Guid.NewGuid();
                            this.vigenciaParametro.FechaDesde = DateTime.Now;

                            new VigenciaParametroLogica().Agregar(this.vigenciaParametro);

                            VentanaAviso nueva = new VentanaAviso(false, "Finalización Exitosa", "El parámetro ha sido ingresado correctamente");
                            nueva.ShowDialog();
                            this.ReiniciarCU(CasosDeUso.IrMenuPrincipal);
                        }
                        else
                        {

                            this.vigenciaParametro.IdVigencia = Guid.NewGuid();
                            this.vigenciaParametro.FechaDesde = DateTime.Now;

                            new VigenciaParametroLogica().Agregar(this.vigenciaParametro);

                            VentanaAviso nueva = new VentanaAviso(false, "Finalización Exitosa", "El parámetro ha sido ingresado correctamente");
                            nueva.ShowDialog();

                            this.ReiniciarCU(CasosDeUso.IrMenuPrincipal);
                        }







                    }
                    catch (Exception)
                    {

                        VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "  Ha ocurrido un error y el parámetro no se ha guardado");
                        nueva.ShowDialog();

                    }

                }

            }

        }




         private bool Validaciones()
         {

             if (this.vigenciaParametro.IdParametro == Guid.Empty)
             {

                 VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe seleccionar un parámetro");
                 nueva.ShowDialog();
                 return false;
             }


             if (String.IsNullOrWhiteSpace(this.vigenciaParametro.Valor))
             {

                 VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe seleccionar un Importe");
                 nueva.ShowDialog();
                 return false;
             }
             else
             {
                 char[] Importe = this.vigenciaParametro.Valor.ToCharArray();
                 int CantComas = 0;
                 for (int i = 0; i < Importe.Length; i++)
                 {
                     if (Importe[i] == ',')
                         CantComas++;
                 }

                 if (CantComas > 1)
                 {

                     VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "El campo 'Importe' ha sido ingresado de forma incorrecta");
                     nueva.ShowDialog();
                     return false;

                 }

             }

             return true;


         }



















    }
}
